package cn.kgc.utils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * 打印日志的工具类
 * 增强类
 */
@Component("loggerUtil")
@Aspect   //当前类是一个切面
public class LoggerUtil {

    @Pointcut("execution( * cn.kgc.service.*.*(..))")
    public void pt(){

    }


    /**
     * 作为前置通知使用
     */
    @Before("pt()")
    public void printLogger(){
        System.out.println("我是打印日志方法,我要开始记录日志信息了!");
    }
    /**
     * 作为后置通知使用
     */
    @AfterReturning("pt()")
    public void afterReturnningPrintLogger(){
        System.out.println("我是后置增强,业务执行完毕");
    }
    /**
     * 作为异常通知使用
     */
    @AfterThrowing("pt()")
    public void afterThrowingPrintLogger(){
        System.out.println("我是异常通知,业务发生了异常");
    }
    /**
     * 作为最终通知使用
     */
    @After("pt()")
    public void afterPrintLogger(){
        System.out.println("我是最终通知,释放资源");
    }

    /**
     * 作为环绕通知使用
     */
    //@Around("pt()")
    public void arroundPrintLogger(ProceedingJoinPoint joinPoint){

        try {
            System.out.println("我是前置增强");
            //执行业务层的方法
            joinPoint.proceed();
            System.out.println("我是后置增强");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("我是异常增强");
        }finally{
            System.out.println("我是最终增强");
        }
    }


}
